xl: fix command truncation
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 21 Jun 2010 17:35:10 +0000 (18:35 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 21 Jun 2010 17:35:10 +0000 (18:35 +0100)
Fix the truncation code so that it always accepts an exact match,
even when one command is a prefix of another one.   This fixes,
e.g., "xl list"

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
tools/libxl/xl_cmdtable.c

index da00cda6630650f1e1f3e2db2a1527442194f5f5..4d4fb7b3305c0b0826837761a3ef0744543f8c30 100644 (file)
@@ -316,18 +316,19 @@ struct cmd_spec *cmdtable_lookup(const char *s)
 {
     struct cmd_spec *cmd = NULL;
     size_t len;
-    int i;
+    int i, count = 0;
 
     if (!s) 
         return NULL;
     len = strlen(s);
     for (i = 0; i < cmdtable_len; i++) {
         if (!strncmp(s, cmd_table[i].cmd_name, len)) {
-            if (cmd == NULL) 
-                cmd = &cmd_table[i];
-            else 
-                return NULL;
+            cmd = &cmd_table[i];
+            /* Take an exact match, even if it also prefixes another command */
+            if (len == strlen(cmd->cmd_name))
+                return cmd;
+            count++;
         }
     }
-    return cmd;
+    return (count == 1) ? cmd : NULL;
 }